package com.yupi.springbootinit.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yupi.springbootinit.common.DeleteRequest;
import com.yupi.springbootinit.model.dto.qa.QaInspectionReportAddRequest;
import com.yupi.springbootinit.model.dto.qa.QaInspectionReportQueryRequest;
import com.yupi.springbootinit.model.dto.qa.QaInspectionReportUpdateRequest;
import com.yupi.springbootinit.model.entity.QaInspectionReport;
import com.yupi.springbootinit.model.entity.User;
import com.yupi.springbootinit.model.vo.qa.QaInspectionReportDetailVO;

import java.util.List;

/**
* @author Administrator
* @description 针对表【qaInspectionReport(成品检验报告（表头）)】的数据库操作Service
* @createDate 2024-02-25 17:04:02
*/
public interface QaInspectionReportService extends IService<QaInspectionReport> {

    /**
     * 添加
     *
     * @param qaInspectionReportAddRequest
     * @return
     */
    long addQaInspectionReport(QaInspectionReportAddRequest qaInspectionReportAddRequest);

    /**
     * 删除
     *
     * @param deleteRequest
     * @return
     */
    boolean deleteQaInspectionReport(DeleteRequest deleteRequest);

    /**
     * 更新检验报告（增加权限校验）
     *
     * @param qaInspectionReportUpdateRequest 更新请求
     * @param currentUser 当前用户
     * @return 是否成功
     */
    boolean updateQaInspectionReport(QaInspectionReportUpdateRequest qaInspectionReportUpdateRequest, User currentUser);
    /**
     * 根据 id 获取
     *
     * @param id
     * @return
     */
    QaInspectionReport getQaInspectionReportById(long id);

    /**
     * 获取列表
     *
     * @param qaInspectionReportQueryRequest
     * @return
     */
    List<QaInspectionReport> listQaInspectionReport(QaInspectionReportQueryRequest qaInspectionReportQueryRequest);

    /**
     * 分页获取列表
     *
     * @param qaInspectionReportQueryRequest
     * @return
     */
    Page<QaInspectionReport> listQaInspectionReportByPage(QaInspectionReportQueryRequest qaInspectionReportQueryRequest);

    /**
     * 导出检验报告为Excel（xlsx），返回字节数组
     * 固定版式、10行FAI、SimSun 字体，包含左侧图片（若存在）
     *
     * @param reportId 报告ID
     * @return Excel 文件字节
     */
    byte[] exportReportExcel(Long reportId);

    /**
     * 获取检验报告详情（包含主尺寸和仪器设备）
     *
     * @param reportId 报告ID
     * @param currentUser 当前登录用户
     * @return 报告详情VO
     */
    QaInspectionReportDetailVO getReportDetail(Long reportId, User currentUser);

    /**
     * 提交检验报告
     *
     * @param reportId 报告ID
     * @param userId 提交人ID
     * @param userName 提交人姓名
     * @return 是否成功
     */
    boolean submitReport(Long reportId, Long userId, String userName);

    /**
     * 通过任务ID打开/创建检验报告
     *
     * 功能：
     * 1. 查询任务信息，获取工艺单ID或批次ID
     * 2. 检查是否已存在报告（防重复创建）
     * 3. 如果不存在，创建报告并初始化数据
     * 4. 返回报告ID
     *
     * @param taskId 任务ID
     * @param initAppearance 是否初始化外观检验数据
     * @return 报告ID
     */
    Long openByTask(Long taskId, boolean initAppearance);
}